﻿using wwl.Contract.Dtos.Common;

namespace wwl.Contract.Dtos.Requests.Rbac
{
  /// <summary>
  /// 租户分页查询请求模型（前端→后端的分页查询参数契约）
  /// 继承通用分页请求基类 <see cref="PagedRequest"/>，扩展租户专属的筛选条件，适配权限模块（Rbac）中租户列表查询场景
  /// </summary>
  /// <remarks>
  /// 属于契约层的请求模型，仅用于传递分页查询所需的参数（页码、页大小、租户筛选条件），不包含业务逻辑
  /// 前端通过该模型传递用户输入的筛选条件（如按租户名称搜索），后端接收后转换为领域查询条件
  /// </remarks>
  public class TenantPagedRequest : PagedRequest
  {
    /// <summary>
    /// 租户编码筛选条件（模糊匹配）
    /// </summary>
    /// <remarks>
    /// 1. 可选参数：为null或空字符串时不参与筛选，否则按编码模糊匹配（如输入"T00"匹配"T001"、"T002"）
    /// 2. 与领域实体关联：对应 <see cref="Domain.Entities.Rbac.Tenant.TenantCode"/> 字段的筛选需求
    /// 3. 传递规则：前端无需处理空值，后端接收后自动忽略空值筛选条件
    /// </remarks>
    public string? TenantCode { get; set; }

    /// <summary>
    /// 租户名称筛选条件（模糊匹配）
    /// </summary>
    /// <remarks>
    /// 1. 可选参数：为null或空字符串时不参与筛选，否则按名称模糊匹配（如输入"测试"匹配"测试租户1"、"测试租户2"）
    /// 2. 与领域实体关联：对应 <see cref="Domain.Entities.Rbac.Tenant.TenantName"/> 字段的筛选需求
    /// 3. 业务场景：常用于前端表格的“名称搜索”功能，提升用户查询效率
    /// </remarks>
    public string? TenantName { get; set; }

    /// <summary>
    /// 租户状态筛选条件（精确匹配）
    /// </summary>
    /// <remarks>
    /// 1. 可选参数：为null或空字符串时不参与筛选，否则按状态值精确匹配（如"ENABLED"匹配启用状态的租户）
    /// 2. 与领域枚举映射：对应 <see cref="Domain.Entities.Rbac.TenantStatus"/> 枚举，前端传递枚举字符串值（如"ENABLED"），
    ///    后端转换为枚举类型后执行筛选，避免直接传递数字（魔法值）导致的语义模糊
    /// 3. 筛选逻辑：后端需处理大小写兼容（如前端传递"enabled"自动转为"ENABLED"），确保查询准确性
    /// </remarks>
    public string? Status { get; set; }
  }
}